//
//  ViewController.swift
//  swift3.0 懒加载
//
//  Created by 龚昕炜 on 16/7/27.
//  Copyright © 2016年 龚昕炜. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
    
    /** 
     懒加载，好处：
        1.解除包的烦恼
        2.延迟创建优化性能
     本质：
        1.闭包
    完整写法：
        lazy var  label: DemoLabel = { ()->DemoLabel in
            let l = DemoLabel()
            return l
        }
        不建议这么写：
            1.闭包中提示不好；
            2.要考虑循环引用
     */
    /** 
     这么写是给赋初始值，但之后可能会将它释放
     只执行一次，执行完后闭包结果保存在label的属性中
     所以swift中不要主动清楚控件，因为懒加载不会再次执行
     */
    lazy var label: DemoLabel? = DemoLabel()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    private func setUpUI() {
        
        label = DemoLabel()
        
        /** 
         强行解包是为了参与计算
         如果用可选解包，为nil时不调用方法但是也不能参与计算
         */
        view.addSubview(label!)
        
        label?.text = "hello"
        label?.sizeToFit()
        label?.center = view.center
        
        /** 释放 */
        label = nil
        
        /** swift中懒加载只执行一次，赋nil后不会在此执行 */
        print(label)
    }

}

